package com.xtq.countclass.dao;

import com.xtq.countclass.entity.Groupe;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 小组表(Groupe)表数据库访问层
 *
 * @author makejava
 * @since 2024-03-06 00:07:52
 */

public interface GroupeDao {
	
	/**
	 * 通过ID查询单条数据
	 *
	 * @param id 主键
	 * @return 实例对象
	 */
	@Select("select * from count.groupe where id = #{id}")
	Groupe queryById(String id);
	
	/**
	 * 查询所有
	 * @return 对象列表
	 */
	@Select("SELECT id, `group`, groupid, CREATED_BY, CREATED_TIME, UPDATED_BY, score, dailyscore,DATE_FORMAT(UPDATED_TIME, '%Y-%m-%d %H:%i:%s') AS UPDATED_TIME FROM groupe")
	List<Groupe> queryAll();
	
	/**
	 * 统计总行数
	 *
	 * @param groupe 查询条件
	 * @return 总行数
	 */
	long count(Groupe groupe);
	
	/**
	 * 新增数据
	 *
	 * @param groupe 实例对象
	 * @return 影响行数
	 */
	
	@Insert("insert into groupe ( `group`, groupid, CREATED_BY, CREATED_TIME,score ) values (#{group},#{groupid},'admin',NOW(),#{score})")
	int insert(Groupe groupe);
	
	/**
	 * 批量新增数据（MyBatis原生foreach方法）
	 *
	 * @param entities List<Groupe> 实例对象列表
	 * @return 影响行数
	 */
	int insertBatch(@Param("entities") List<Groupe> entities);
	
	/**
	 * 批量新增或按主键更新数据（MyBatis原生foreach方法）
	 *
	 * @param entities List<Groupe> 实例对象列表
	 * @return 影响行数
	 * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常，请自行校验入参
	 */
	int insertOrUpdateBatch(@Param("entities") List<Groupe> entities);
	
	/**
	 * 修改数据
	 *
	 * @param groupe 实例对象
	 * @return 影响行数
	 */
	@Update("update groupe set score = #{score},UPDATED_TIME=NOW() where(id=#{id})")
	int update(Groupe groupe);
	
	/**
	 * 通过主键删除数据
	 *
	 * @param id 主键
	 * @return 影响行数
	 */
	@Delete("delete from groupe where id=#{id}")
	int deleteById(String id);
	
	@Select("select *from groupe where `group` like CONCAT('%', #{key}, '%')")
	List<Groupe> groupNameLike(@Param("key") String key);
	
	@Select("select MAX(score) FROM groupe")
	Integer getMaxScore();
	
	/**
	 * @param lowerScore 平时分最低
	 * @param rate (maxScore-lowerScore)/maxScoreClass
	 *             将每个人的分数乘以rate再加lowerScore得到平时分
	 */
	@Update("update groupe set dailyscore = score*#{rate}+#{lowerScore} where true")
	void updateScore(Integer lowerScore, double rate);
	
	@Update("update groupe set `group` = #{group} where id =#{id}")
	Boolean modifyGroupName(Groupe groupe);
	@Update("update groupe set groupid=#{groupeid} where id=#{id} ")
	Boolean modifyLeaderId(String id, String groupeid);
}
